home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / c / hce.lha / HCE / Examples / AMIGA / Pools / GadTools.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-02  |  13.7 KB  |  537 lines

  1. /*
  2.  * Copyright (c) 1994. Author: Jason Petty.
  3.  *
  4.  * Permission is granted to anyone to use this software for any purpose
  5.  * on any computer system, and to redistribute it freely, with the
  6.  * following restrictions:
  7.  * 1) No charge may be made other than reasonable charges for reproduction.
  8.  * 2) Modified versions must be clearly marked as such.
  9.  * 3) The authors are not responsible for any harmful consequences
  10.  *    of using this software, even if they result from defects in it.
  11.  *
  12.  *
  13.  *     GadTools.c:
  14.  *
  15.  *     GadTool functions. (gadtools.library, V36 or higher)
  16.  */
  17.  
  18. #include <exec/types.h>
  19. #include <clib/stdio.h>
  20. #include <intuition/intuition.h>
  21. #include <libraries/gadtools.h>
  22.  
  23. #ifndef STRING_H
  24. #include <clib/string.h>
  25. #endif
  26.  
  27. #include "pools.h"
  28.  
  29. extern struct Screen *my_screen;   /* Screen all windows are attached to. */
  30. struct Gadget *gt_gadlist=0;       /* Head of leagues Gadget list.        */
  31. struct Gadget *sl_gadlist=0;       /* Head of choose league Gadget list.  */
  32. struct TagItem up_cycleTags1[2];
  33.  
  34. APTR gt_visual=0;                  /* Screen private data for GadTools.   */
  35.  
  36. char *CycleNames1[] = {"YES","NO", NULL}; /* Cycle gadget names. */
  37. char *CycleNames2[] = {"NO","YES", NULL};
  38. char *CycleNames3[] = {"ON","OFF", NULL};
  39. char *CycleNames4[] = {"OFF","ON", NULL};
  40. char *CycleNames5[] = {"32 BIT","16 BIT", NULL};
  41. char *CycleNames6[] = {"16 BIT","32 BIT", NULL};
  42.  
  43.  
  44. /* BUTTON GADGET FUNCTIONS. */
  45. struct Gadget *MakeButtonGad(name,prevGad,vis,lE,tE,w,h)
  46. UBYTE *name;
  47. struct Gadget *prevGad;
  48. APTR vis;
  49. WORD lE,tE,w,h;
  50. {
  51.  struct Gadget *mcgad;
  52.  chip struct NewGadget newGad;
  53.  
  54.      newGad.ng_LeftEdge = lE;
  55.      newGad.ng_TopEdge = tE;
  56.      newGad.ng_Width = w;
  57.      newGad.ng_Height = h;
  58.    if(name)
  59.      newGad.ng_GadgetText = (UBYTE *)name;
  60.    else
  61.      newGad.ng_GadgetText = NULL;
  62.      newGad.ng_TextAttr = NULL;
  63.      newGad.ng_GadgetID = 0L;
  64.      newGad.ng_Flags = PLACETEXT_IN|NG_HIGHLABEL;
  65.      newGad.ng_VisualInfo = vis;
  66.      newGad.ng_UserData = NULL;
  67.  
  68.    if(!(mcgad = (struct Gadget *)
  69.      CreateGadgetA(BUTTON_KIND,prevGad,&newGad,NULL))) /* No tags needed. */
  70.      return(NULL);
  71.  
  72.  return(mcgad);
  73. }
  74.  
  75. /* CYCLE GADGET FUNCTIONS. */
  76. void SetCycleTags(sc_tags,sc_type)   /* Set Tags for Cycle Gadget. */
  77. struct TagItem sc_tags[2];
  78. int sc_type;
  79. {
  80.    sc_tags[0].ti_Tag = GTCY_Labels;
  81.  
  82.    switch(sc_type)  /* Set cycle Messages. */
  83.     {
  84.       case YES_NO: sc_tags[0].ti_Data = (ULONG)CycleNames1;
  85.                    break;
  86.       case NO_YES: sc_tags[0].ti_Data = (ULONG)CycleNames2;
  87.                    break;
  88.       case ON_OFF: sc_tags[0].ti_Data = (ULONG)CycleNames3;
  89.                    break;
  90.       case OFF_ON: sc_tags[0].ti_Data = (ULONG)CycleNames4;
  91.                    break;
  92.       case BIT32_BIT16: sc_tags[0].ti_Data = (ULONG)CycleNames5;
  93.                    break;
  94.       case BIT16_BIT32: sc_tags[0].ti_Data = (ULONG)CycleNames6;
  95.                    break;
  96.       default:     sc_tags[0].ti_Data = (ULONG)CycleNames1;
  97.                    break;
  98.      }
  99.    sc_tags[1].ti_Tag = TAG_DONE;
  100.   sc_tags[1].ti_Data = TAG_DONE;
  101. }
  102.  
  103. struct Gadget *MakeCycleGad(name,prevGad,CTags,vis,lE,tE,w,h)
  104. UBYTE *name;
  105. struct Gadget *prevGad;
  106. struct TagItem CTags[2];
  107. APTR vis;
  108. WORD lE,tE,w,h;
  109. {
  110.  struct Gadget *mcgad;
  111.  struct NewGadget newGad;
  112.  
  113.      newGad.ng_LeftEdge = lE;
  114.      newGad.ng_TopEdge = tE;
  115.      newGad.ng_Width = w;
  116.      newGad.ng_Height = h;
  117.      newGad.ng_GadgetText = (UBYTE *)name;
  118.      newGad.ng_TextAttr = NULL;
  119.      newGad.ng_GadgetID = 0L;
  120.      newGad.ng_Flags = PLACETEXT_LEFT|NG_HIGHLABEL;
  121.      newGad.ng_VisualInfo = vis;
  122.      newGad.ng_UserData = NULL;
  123.  
  124.    if(!(mcgad = (struct Gadget *)
  125.      CreateGadgetA(CYCLE_KIND,prevGad,&newGad,CTags)))
  126.      return(NULL);
  127.  
  128.  return(mcgad);
  129. }
  130.  
  131.  
  132. /* STRING GADGET FUNCTIONS. */
  133. void SetStringTags(ss_tags,ss_msg,slen)   /* Set Tags for String Gadget. */
  134. struct TagItem ss_tags[3];
  135. char *ss_msg;
  136. int slen;
  137. {
  138.       ss_tags[0].ti_Tag = GTST_String;
  139.  
  140.    if(ss_msg)    /* If Gad message string exists, use it. */
  141.        ss_tags[0].ti_Data = (ULONG)ss_msg;
  142.      else
  143.        ss_tags[0].ti_Data = NULL;
  144.  
  145.       ss_tags[1].ti_Tag = GTST_MaxChars;
  146.     ss_tags[1].ti_Data = (ULONG)slen;   /* Max typed chars. */
  147.   ss_tags[2].ti_Tag = TAG_DONE;
  148. ss_tags[2].ti_Data = TAG_DONE;
  149. }
  150.  
  151. struct Gadget *MakeStringGad(name,prevGad,CTags,vis,lE,tE,w,h)
  152. UBYTE *name;
  153. struct Gadget *prevGad;
  154. struct TagItem CTags[3];
  155. APTR vis;
  156. WORD lE,tE,w,h;
  157. {
  158.  struct Gadget *mcgad;
  159.  struct NewGadget newGad;
  160.  
  161.      newGad.ng_LeftEdge = lE;
  162.      newGad.ng_TopEdge = tE;
  163.      newGad.ng_Width = w;
  164.      newGad.ng_Height = h;
  165.      newGad.ng_GadgetText = (UBYTE *)name;
  166.      newGad.ng_TextAttr = NULL;
  167.      newGad.ng_GadgetID = 0L;
  168.      newGad.ng_Flags = PLACETEXT_LEFT|NG_HIGHLABEL;
  169.      newGad.ng_VisualInfo = vis;
  170.      newGad.ng_UserData = NULL;
  171.  
  172.    if(!(mcgad = (struct Gadget *)
  173.      CreateGadgetA(STRING_KIND,prevGad,&newGad,CTags)))
  174.      return(NULL);
  175.  
  176.  return(mcgad);
  177. }
  178.  
  179.  
  180. /* INTEGER GADGET FUNCTIONS. */
  181. struct Gadget *MakeIntegerGad(name,prevGad,vis,lE,tE,w,h)
  182. UBYTE *name;
  183. struct Gadget *prevGad;
  184. APTR vis;
  185. WORD lE,tE,w,h;
  186. {
  187.  struct Gadget *mcgad;
  188.  struct NewGadget newGad;
  189.  
  190.      newGad.ng_LeftEdge = lE;
  191.      newGad.ng_TopEdge = tE;
  192.      newGad.ng_Width = w;
  193.      newGad.ng_Height = h;
  194.    if(name)
  195.      newGad.ng_GadgetText = (UBYTE *)name;
  196.    else
  197.      newGad.ng_GadgetText = NULL;
  198.      newGad.ng_TextAttr = NULL;
  199.      newGad.ng_GadgetID = 0L;
  200.      newGad.ng_Flags = PLACETEXT_LEFT;
  201.      newGad.ng_VisualInfo = vis;
  202.      newGad.ng_UserData = NULL;
  203.  
  204.    if(!(mcgad = (struct Gadget *)
  205.      CreateGadgetA(INTEGER_KIND,prevGad,&newGad,NULL))) /* No tags needed. */
  206.      return(NULL);
  207.  
  208.  return(mcgad);
  209. }
  210.  
  211. int Alloc_VisualInfoA() /* Get visual info for gadtools. */
  212. {
  213.   if(!(gt_visual = (APTR)GetVisualInfoA(my_screen, NULL)))
  214.       return(NULL);
  215.   return(1);
  216. }
  217.  
  218. void Free_VisualInfo() /* Free memory allocated with Alloc_VisualInfoA(). */
  219. {                      /* NOTE: call just before CloseScreen(). */
  220.   if(gt_visual)
  221.    FreeVisualInfo(gt_visual);
  222. }
  223.  
  224.  
  225. /* MOST FUNCTIONS FROM HERE ON ,USE THE ABOVE FUNCTIONS!!. */
  226. int Alloc_L_Gadgets()    /* Allocate LEAGUE window gadgets. */
  227. {
  228.   struct Gadget *prevGad;
  229.   struct Gadget *nextGad;
  230.   int inn = INN_X;       /* Left row gads start x.  */
  231.   int mid = MID_X;       /* Middle row gads start x.*/
  232.   int out = OUT_X;       /* Right row gads start x. */
  233.   int t = TOP_Y;         /* Start y for all gads.   */
  234.   int g = GAP_Y;         /* Gap between gads in y direction. */
  235.   int h = WID_Y;         /* Height of each gad.     */
  236.  
  237. /* MAKE CONTEXT GADGET. */
  238.  if(!(prevGad = (struct Gadget *)CreateContext(>_gadlist)))
  239.         return(NULL);
  240.  
  241. /* BUTTON GAD 1. */
  242.  if(!(nextGad = MakeButtonGad((UBYTE *)"1",
  243.      prevGad,gt_visual,inn,t,24,h)))
  244.      {
  245.        return(NULL);
  246.       }
  247. /* BUTTON GAD 2. */
  248.  if(!(prevGad = MakeButtonGad((UBYTE *)"2",
  249.      nextGad,gt_visual,mid,t,24,h)))
  250.      {
  251.        return(NULL);
  252.       }
  253. /* BUTTON GAD 3. */
  254.  if(!(nextGad = MakeButtonGad((UBYTE *)"3",
  255.      prevGad,gt_visual,out,t,24,h)))
  256.      {
  257.        return(NULL);
  258.       }
  259. /* BUTTON GAD 4. */
  260.  if(!(prevGad = MakeButtonGad((UBYTE *)"4",
  261.      nextGad,gt_visual,inn,t+h+g,24,h)))
  262.      {
  263.        return(NULL);
  264.       }
  265. /* BUTTON GAD 5. */
  266.  if(!(nextGad = MakeButtonGad((UBYTE *)"5",
  267.      prevGad,gt_visual,mid,t+h+g,24,h)))
  268.      {
  269.        return(NULL);
  270.       }
  271. /* BUTTON GAD 6. */
  272.  if(!(prevGad = MakeButtonGad((UBYTE *)"6",
  273.      nextGad,gt_visual,out,t+h+g,24,h)))
  274.      {
  275.        return(NULL);
  276.       }
  277. /* BUTTON GAD 7. */
  278.  if(!(nextGad = MakeButtonGad((UBYTE *)"7",
  279.      prevGad,gt_visual,inn,t+((h+g)*2),24,h)))
  280.      {
  281.        return(NULL);
  282.       }
  283. /* BUTTON GAD 8. */
  284.  if(!(prevGad = MakeButtonGad((UBYTE *)"8",
  285.      nextGad,gt_visual,mid,t+((h+g)*2),24,h)))
  286.      {
  287.        return(NULL);
  288.       }
  289. /* BUTTON GAD 9. */
  290.  if(!(nextGad = MakeButtonGad((UBYTE *)"9",
  291.      prevGad,gt_visual,out,t+((h+g)*2),24,h)))
  292.      {
  293.        return(NULL);
  294.       }
  295. /* BUTTON GAD 10. */
  296.  if(!(prevGad = MakeButtonGad((UBYTE *)"10",
  297.      nextGad,gt_visual,inn,t+((h+g)*3),24,h)))
  298.      {
  299.        return(NULL);
  300.       }
  301. /* BUTTON GAD 11. */
  302.  if(!(nextGad = MakeButtonGad((UBYTE *)"11",
  303.      prevGad,gt_visual,mid,t+((h+g)*3),24,h)))
  304.      {
  305.        return(NULL);
  306.       }
  307. /* BUTTON GAD 12. */
  308.  if(!(prevGad = MakeButtonGad((UBYTE *)"12",
  309.      nextGad,gt_visual,out,t+((h+g)*3),24,h)))
  310.      {
  311.        return(NULL);
  312.       }
  313. /* BUTTON GAD 13. */
  314.  if(!(nextGad = MakeButtonGad((UBYTE *)"13",
  315.      prevGad,gt_visual,inn,t+((h+g)*4),24,h)))
  316.      {
  317.        return(NULL);
  318.       }
  319. /* BUTTON GAD 14. */
  320.  if(!(prevGad = MakeButtonGad((UBYTE *)"14",
  321.      nextGad,gt_visual,mid,t+((h+g)*4),24,h)))
  322.      {
  323.        return(NULL);
  324.       }
  325. /* BUTTON GAD 15. */
  326.  if(!(nextGad = MakeButtonGad((UBYTE *)"15",
  327.      prevGad,gt_visual,out,t+((h+g)*4),24,h)))
  328.      {
  329.        return(NULL);
  330.       }
  331. /* BUTTON GAD 16. */
  332.  if(!(prevGad = MakeButtonGad((UBYTE *)"16",
  333.     nextGad,gt_visual,inn,t+((h+g)*5),24,h)))
  334.      {
  335.        return(NULL);
  336.       }
  337. /* BUTTON GAD 17. */
  338.  if(!(nextGad = MakeButtonGad((UBYTE *)"17",
  339.      prevGad,gt_visual,mid,t+((h+g)*5),24,h)))
  340.      {
  341.        return(NULL);
  342.       }
  343. /* BUTTON GAD 18. */
  344.  if(!(prevGad = MakeButtonGad((UBYTE *)"18",
  345.      nextGad,gt_visual,out,t+((h+g)*5),24,h)))
  346.      {
  347.        return(NULL);
  348.       }
  349. /* BUTTON GAD 19. */
  350.  if(!(nextGad = MakeButtonGad((UBYTE *)"19",
  351.      prevGad,gt_visual,inn,t+((h+g)*6),24,h)))
  352.      {
  353.        return(NULL);
  354.       }
  355. /* BUTTON GAD 20. */
  356.  if(!(prevGad = MakeButtonGad((UBYTE *)"20",
  357.      nextGad,gt_visual,mid,t+((h+g)*6),24,h)))
  358.      {
  359.        return(NULL);
  360.       }
  361. /* BUTTON GAD 21. */
  362.  if(!(nextGad = MakeButtonGad((UBYTE *)"21",
  363.      prevGad,gt_visual,out,t+((h+g)*6),24,h)))
  364.      {
  365.        return(NULL);
  366.       }
  367. /* BUTTON GAD 21. */
  368.  if(!(prevGad = MakeButtonGad((UBYTE *)"22",
  369.      nextGad,gt_visual,inn,t+((h+g)*7),24,h)))
  370.      {
  371.        return(NULL);
  372.       }
  373. /* BUTTON GAD 23. */
  374.  if(!(nextGad = MakeButtonGad((UBYTE *)"23",
  375.      prevGad,gt_visual,mid,t+((h+g)*7),24,h)))
  376.      {
  377.        return(NULL);
  378.       }
  379. /* BUTTON GAD 24. */
  380.  if(!(prevGad = MakeButtonGad((UBYTE *)"24",
  381.      nextGad,gt_visual,out,t+((h+g)*7),24,h)))
  382.      {
  383.        return(NULL);
  384.       }
  385. /* BUTTON GAD 25. */
  386.  if(!(nextGad = MakeButtonGad((UBYTE *)"25",
  387.      prevGad,gt_visual,inn,t+((h+g)*8),24,h)))
  388.      {
  389.        return(NULL);
  390.       }
  391. /* BUTTON GAD 26. */
  392.  if(!(prevGad = MakeButtonGad((UBYTE *)"26",
  393.      nextGad,gt_visual,mid,t+((h+g)*8),24,h)))
  394.      {
  395.        return(NULL);
  396.       }
  397. /* BUTTON GAD 27. */
  398.  if(!(nextGad = MakeButtonGad((UBYTE *)"27",
  399.      prevGad,gt_visual,out,t+((h+g)*8),24,h)))
  400.      {
  401.        return(NULL);
  402.       }
  403.  
  404. /* BUTTON GAD 29. "Help". */
  405.  if(!(prevGad = MakeButtonGad((UBYTE *)"Help",
  406.      nextGad,gt_visual,inn-55,RS_Y-42,42,h)))
  407.      {
  408.        return(NULL);
  409.       }
  410.  
  411. /* CYCLE GAD1. "Printer" */
  412.      SetCycleTags(up_cycleTags1,OFF_ON);
  413.  
  414.  if(!(nextGad = MakeCycleGad((UBYTE *)"Printer",
  415.      prevGad,up_cycleTags1,gt_visual,inn+101,RS_Y-42,68,h)))
  416.      {
  417.        return(NULL);
  418.       }
  419.  
  420. /* BUTTON GAD 28. "Print-Heading". */
  421.  if(!(prevGad = MakeButtonGad((UBYTE *)"Print-Heading",
  422.      nextGad,gt_visual,mid+60,RS_Y-42,114,h)))
  423.      {
  424.        return(NULL);
  425.       }
  426.  
  427. /* INT GAD1. "Set_Coupon-No" */
  428.  if(!(nextGad = MakeIntegerGad((UBYTE *)"Set_Coupon-No",
  429.      prevGad,gt_visual,out+120,RS_Y-42,42,h)))
  430.      {
  431.       return(NULL);
  432.       }
  433.  
  434.   if(!(Alloc_D_Gadgets()))  /* Alloc_D_Gadgets while we are on. */
  435.       return(NULL);
  436.  
  437. return(1); /* Ok!!. */
  438. }
  439.  
  440. int Alloc_D_Gadgets()  /* Allocate 'Choose LEAGUE' gfx_window gadgets. */
  441. {
  442.   struct Gadget *prevGad;
  443.   struct Gadget *nextGad;
  444.   int out = c_OUT_X;     /* right row gads start x. */
  445.   int t = c_TOP_Y;       /* start y for all gads.   */
  446.   int g = c_GAP_Y;       /* gap between gads in y direction. */
  447.   int h = c_WID_Y;       /* Height of each gad.     */
  448.  
  449. /* MAKE CONTEXT GADGET. */
  450.  if(!(prevGad = (struct Gadget *)CreateContext(&sl_gadlist)))
  451.         return(NULL);
  452.  
  453. /* BUTTON GAD 1. */
  454.  if(!(nextGad = MakeButtonGad((UBYTE *)"1",
  455.      prevGad,gt_visual,out,t,24,h)))
  456.      {
  457.        return(NULL);
  458.       }
  459. /* BUTTON GAD 2. */
  460.  if(!(prevGad = MakeButtonGad((UBYTE *)"2",
  461.      nextGad,gt_visual,out,t+h+g,24,h)))
  462.      {
  463.        return(NULL);
  464.       }
  465. /* BUTTON GAD 3. */
  466.  if(!(nextGad = MakeButtonGad((UBYTE *)"3",
  467.      prevGad,gt_visual,out,t+((h+g)*2),24,h)))
  468.      {
  469.        return(NULL);
  470.       }
  471. /* BUTTON GAD 4. */
  472.  if(!(prevGad = MakeButtonGad((UBYTE *)"4",
  473.      nextGad,gt_visual,out,t+((h+g)*3),24,h)))
  474.      {
  475.        return(NULL);
  476.       }
  477. /* BUTTON GAD 5. */
  478.  if(!(nextGad = MakeButtonGad((UBYTE *)"5",
  479.      prevGad,gt_visual,out,t+((h+g)*4),24,h)))
  480.      {
  481.        return(NULL);
  482.       }
  483. /* BUTTON GAD 6. */
  484.  if(!(prevGad = MakeButtonGad((UBYTE *)"6",
  485.      nextGad,gt_visual,out,t+((h+g)*5),24,h)))
  486.      {
  487.        return(NULL);
  488.       }
  489. /* BUTTON GAD 7. */
  490.  if(!(nextGad = MakeButtonGad((UBYTE *)"7",
  491.      prevGad,gt_visual,out,t+((h+g)*6),24,h)))
  492.      {
  493.        return(NULL);
  494.       }
  495. /* BUTTON GAD 8. */
  496.  if(!(prevGad = MakeButtonGad((UBYTE *)"8",
  497.      nextGad,gt_visual,out,t+((h+g)*7),24,h)))
  498.      {
  499.        return(NULL);
  500.       }
  501. /* BUTTON GAD 9. */
  502.  if(!(nextGad = MakeButtonGad((UBYTE *)"9",
  503.      prevGad,gt_visual,out,t+((h+g)*8),24,h)))
  504.      {
  505.        return(NULL);
  506.       }
  507. /* BUTTON GAD 10. */
  508.  if(!(prevGad = MakeButtonGad((UBYTE *)"10",
  509.      nextGad,gt_visual,out,t+((h+g)*9),24,h)))
  510.      {
  511.        return(NULL);
  512.       }
  513. /* BUTTON GAD 11. */
  514.  if(!(nextGad = MakeButtonGad((UBYTE *)"11",
  515.      prevGad,gt_visual,out,t+((h+g)*10),24,h)))
  516.      {
  517.        return(NULL);
  518.       }
  519. /* BUTTON GAD 12. */
  520.  if(!(prevGad = MakeButtonGad((UBYTE *)"12",
  521.      nextGad,gt_visual,out,t+((h+g)*11),24,h)))
  522.      {
  523.        return(NULL);
  524.       }
  525.  
  526. return(1); /* OK!! */
  527. }
  528.  
  529. void Free_GT_Gadgets() /* Free all GadTools gadget memory. */
  530. {                      /* NOTE: g_window must be closed before this call.*/
  531.    if(gt_gadlist)
  532.            FreeGadgets(gt_gadlist);  /* League gadgets. */
  533.    if(sl_gadlist)
  534.            FreeGadgets(sl_gadlist);  /* choose league gadgets. */
  535. }
  536.  
  537.